import { useUserStore } from '@stores/user'
import { getUrlVariable, resetUri, toPortal } from '@/utils/redirect'
import { ElMessage } from 'element-plus'
import { logoutApi } from '@api/login'
import { getBasePath } from '@/utils/index'
import { checkToken } from '@/api/modules/login'
/**
 * 校验令牌，若有效期小于半小时自动续期
 */
export async function toLogin(checkUrl?: boolean) {
  if (checkUrl) {
    const accessToken = getUrlVariable('accessToken')
    const store = useUserStore()
    if (accessToken) {
      store.setToken(accessToken)
      // await store.getUserInfo()
      resetUri()
    }
    return
  }

  // 如果vite配置登录地址则使用配置路径
  // 否则使用系统参数  方便本地调试
  toPortal(true)
}

export function getHomeUrl() {
  return window.location.protocol + '//' + window.location.host + getBasePath() // 获取当前页面的url
}

export async function logout(auto: boolean = true) {
  if (auto) {
    // 1.执行退出登录接口
    try {
      await logoutApi()
    } finally {
      ElMessage.success('退出登录成功！')
      logoutHandle()
    }
  } else {
    logoutHandle(true)
  }
}

async function logoutHandle(redirect?: boolean) {
  clearToken()
  // 3.重定向到登陆页
  if (import.meta.env.DEV || redirect) {
    toPortal(true)
  } else {
    toPortal()
  }
}

export function clearToken() {
  const store = useUserStore()
  // 2.清除 Token
  store.setToken('')
  // 2.清除 Token
  store.setUserInfo(undefined)
}

export async function doCheckTokenTask() {
  try {
    const store = useUserStore()
    const { token } = store
    if (!token) {
      toLogin(true)
      return false
    } else {
      const { code } = await checkToken()
      if (code && code === 0) {
        setTimeout(doCheckTokenTask, 60000)
        return true
      }
      return false
    }
  } catch (e) {
    return false
  }
}
